Package de.yaams.extensions.basemap.tiled.mapeditor.dialogs

Source Code of de.yaams.extensions.basemap.tiled.mapeditor.dialogs.ConfigurationDialog

/*
* Tiled Map Editor, (c) 2004-2006
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* Adam Turk <aturk@biggeruniverse.com> Bjorn Lindeijer <bjorn@lindeijer.nl>
*/

package de.yaams.extensions.basemap.tiled.mapeditor.dialogs;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.prefs.Preferences;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import de.yaams.extensions.basemap.tiled.mapeditor.Resources;
import de.yaams.extensions.basemap.tiled.mapeditor.util.ConfirmableFileFilter;
import de.yaams.extensions.basemap.tiled.mapeditor.util.ConfirmingFileChooser;
import de.yaams.extensions.basemap.tiled.mapeditor.widget.IntegerSpinner;
import de.yaams.extensions.basemap.tiled.mapeditor.widget.VerticalStaticJPanel;
import de.yaams.extensions.basemap.tiled.util.TiledConfiguration;
import de.yaams.maker.helper.gui.YEx;

/**
* @version $Id$
*/
public class ConfigurationDialog extends JDialog {
  /**
   *
   */
  private static final long serialVersionUID = -5755298931679813804L;
  private IntegerSpinner undoDepth;
  private JSlider gridOpacitySlider;
  private JCheckBox cbBinaryEncode;
  private JCheckBox cbCompressLayerData;
  private JCheckBox cbUsefulComments;
  private JCheckBox cbEmbedImages;
  private JCheckBox cbReportIOWarnings;
  private JCheckBox cbAutoOpenLastFile;
  private JRadioButton rbEmbedInTiles;
  private JRadioButton rbEmbedInSet;
  private JCheckBox cbGridAA;
  // private JColorChooser gridColor;

  private static final Preferences prefs = TiledConfiguration.root();
  private static final Preferences savingPrefs = prefs.node("saving");
  private static final Preferences ioPrefs = prefs.node("io");
  private static final Preferences displayPrefs = prefs.node("display");

  private static final String DIALOG_TITLE = Resources.getString("dialog.preferences.title");
  private static final String CLOSE_BUTTON = Resources.getString("general.button.close");
  private static final String OPACITY_LABEL = Resources.getString("dialog.preferences.opacity.label");
  private static final String BINARY_ENCODE_CHECKBOX = Resources.getString("dialog.preferences.binary.encode.checkbox");
  private static final String COMPRESS_LAYER_DATA_CHECKBOX = Resources.getString("dialog.preferences.compress.layer.data.checkbox");
  private static final String USEFUL_COMMENTS_CHECKBOX = Resources.getString("dialog.preferences.useful.comments.checkbox");
  private static final String EMBED_IMAGES_CHECKBOX = Resources.getString("dialog.preferences.embed.images.checkbox");
  private static final String REPORT_IO_WARNINGS_CHECKBOX = Resources.getString("dialog.preferences.report.io.warnings.checkbox");
  private static final String AUTO_OPEN_LAST_FILE_CHECKBOX = Resources.getString("dialog.preferences.report.io.autoopenlast.checkbox");
  private static final String EMBED_IN_TILES_CHECKBOX = Resources.getString("dialog.preferences.embed.in.tiles.checkbox");
  private static final String EMBED_IN_SET_CHECKBOX = Resources.getString("dialog.preferences.embed.in.set.checkbox");
  private static final String ANTIALIASING_CHECKBOX = Resources.getString("dialog.preferences.antialiasing.checkbox");
  private static final String GENERAL_SAVING_OPTIONS_TITLE = Resources.getString("dialog.preferences.general.tab");
  private static final String LAYER_OPTIONS_TITLE = Resources.getString("dialog.preferences.layer.options.title");
  private static final String UNDO_DEPTH_LABEL = Resources.getString("dialog.preferences.undo.depth.label");
  private static final String TILESET_OPTIONS_TITLE = Resources.getString("dialog.preferences.tileset.options.title");
  private static final String GENERAL_TAB = Resources.getString("dialog.preferences.general.tab");
  private static final String SAVING_TAB = Resources.getString("dialog.preferences.saving.tab");
  private static final String GRID_TAB = Resources.getString("dialog.preferences.grid.tab");
  private static final String EXPORT_BUTTON = Resources.getString("dialog.preferences.export.button");
  private static final String IMPORT_BUTTON = Resources.getString("dialog.preferences.import.button");

  private static final ConfirmableFileFilter xmlFileFilter = new ConfirmableFileFilter() {
    @Override
    public String getDefaultExtension() {
      return "xml";
    }

    @Override
    public boolean accept(File file) {
      return file.isDirectory() || file.getPath().endsWith(".xml");
    }

    @Override
    public String getDescription() {
      return "XML files (*.xml)";
    }
  };

  public ConfigurationDialog(JFrame parent) {
    super(parent, DIALOG_TITLE, true);
    init();
    pack();
    setResizable(false);
    setLocationRelativeTo(parent);
  }

  private void init() {
    // Create primitives

    cbBinaryEncode = new JCheckBox(BINARY_ENCODE_CHECKBOX);
    cbCompressLayerData = new JCheckBox(COMPRESS_LAYER_DATA_CHECKBOX);
    cbUsefulComments = new JCheckBox(USEFUL_COMMENTS_CHECKBOX);
    cbEmbedImages = new JCheckBox(EMBED_IMAGES_CHECKBOX);
    cbReportIOWarnings = new JCheckBox(REPORT_IO_WARNINGS_CHECKBOX);
    cbAutoOpenLastFile = new JCheckBox(AUTO_OPEN_LAST_FILE_CHECKBOX);
    rbEmbedInTiles = new JRadioButton(EMBED_IN_TILES_CHECKBOX);
    rbEmbedInSet = new JRadioButton(EMBED_IN_SET_CHECKBOX);
    ButtonGroup bg = new ButtonGroup();
    bg.add(rbEmbedInTiles);
    bg.add(rbEmbedInSet);
    undoDepth = new IntegerSpinner();
    cbGridAA = new JCheckBox(ANTIALIASING_CHECKBOX);
    gridOpacitySlider = new JSlider(0, 255, 255);
    // gridColor = new JColorChooser();

    // Set up the layout

    /* LAYER OPTIONS */
    JPanel layerOps = new VerticalStaticJPanel();
    layerOps.setLayout(new GridBagLayout());
    layerOps.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(LAYER_OPTIONS_TITLE),
        BorderFactory.createEmptyBorder(0, 5, 5, 5)));
    GridBagConstraints c = new GridBagConstraints();
    c.anchor = GridBagConstraints.EAST;
    c.fill = GridBagConstraints.NONE;
    c.gridy = 1;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 1;
    c.gridy = 0;
    c.weightx = 1;
    layerOps.add(cbBinaryEncode, c);
    c.gridy = 2;
    c.insets = new Insets(0, 10, 0, 0);
    layerOps.add(cbCompressLayerData, c);

    /* GENERAL OPTIONS */
    JPanel generalOps = new VerticalStaticJPanel();
    generalOps.setLayout(new GridBagLayout());
    generalOps.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    c = new GridBagConstraints();
    c.anchor = GridBagConstraints.NORTH;
    c.fill = GridBagConstraints.NONE;
    generalOps.add(new JLabel(UNDO_DEPTH_LABEL), c);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 1;
    c.weightx = 1;
    generalOps.add(undoDepth, c);
    c.gridy = 1;
    c.gridx = 0;
    generalOps.add(cbReportIOWarnings, c);
    c.gridy = 2;
    c.gridx = 0;
    generalOps.add(cbAutoOpenLastFile, c);

    /* GENERAL SAVING OPTIONS */
    JPanel generalSavingOps = new VerticalStaticJPanel();
    generalSavingOps.setLayout(new GridBagLayout());
    generalSavingOps.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(GENERAL_SAVING_OPTIONS_TITLE),
        BorderFactory.createEmptyBorder(0, 5, 5, 5)));
    c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 1;
    c.gridy = 0;
    c.weightx = 1;
    generalSavingOps.add(cbUsefulComments, c);

    /* TILESET OPTIONS */
    JPanel tilesetOps = new VerticalStaticJPanel();
    tilesetOps.setLayout(new GridBagLayout());
    tilesetOps.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(TILESET_OPTIONS_TITLE),
        BorderFactory.createEmptyBorder(0, 5, 5, 5)));
    tilesetOps.add(cbEmbedImages, c);
    c.gridy = 1;
    c.insets = new Insets(0, 10, 0, 0);
    tilesetOps.add(rbEmbedInTiles, c);
    c.gridy = 2;
    c.insets = new Insets(0, 10, 0, 0);
    tilesetOps.add(rbEmbedInSet, c);

    /* GRID OPTIONS */
    JPanel gridOps = new VerticalStaticJPanel();
    gridOps.setLayout(new GridBagLayout());
    gridOps.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    c = new GridBagConstraints();
    c.insets = new Insets(0, 0, 0, 5);
    gridOps.add(new JLabel(OPACITY_LABEL), c);
    c.insets = new Insets(0, 0, 0, 0);
    c.weightx = 1;
    c.gridx = 1;
    c.fill = GridBagConstraints.HORIZONTAL;
    gridOps.add(gridOpacitySlider, c);
    c.gridwidth = 2;
    c.gridy = 1;
    c.gridx = 0;
    gridOps.add(cbGridAA, c);
    // c.gridy = 2; c.weightx = 0;
    // gridOps.add(new JLabel("Color: "), c);
    // c.gridx = 1;
    // gridOps.add(gridColor, c);

    JButton exportButton = new JButton(EXPORT_BUTTON);
    exportButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent actionEvent) {
        doExport();
      }
    });

    JButton importButton = new JButton(IMPORT_BUTTON);
    importButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent actionEvent) {
        doImport();
      }
    });

    JButton closeButton = new JButton(CLOSE_BUTTON);
    closeButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent actionEvent) {
        dispose();
      }
    });

    /* BUTTONS PANEL */
    JPanel buttons = new VerticalStaticJPanel();
    buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS));
    buttons.add(exportButton);
    buttons.add(Box.createRigidArea(new Dimension(5, 5)));
    buttons.add(importButton);
    buttons.add(Box.createRigidArea(new Dimension(5, 5)));
    buttons.add(Box.createGlue());
    buttons.add(closeButton);

    JPanel saving = new JPanel();
    saving.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    saving.setLayout(new BoxLayout(saving, BoxLayout.Y_AXIS));
    saving.add(generalSavingOps);
    saving.add(layerOps);
    saving.add(tilesetOps);

    JPanel general = new JPanel();
    general.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    general.setLayout(new BoxLayout(general, BoxLayout.Y_AXIS));
    general.add(generalOps);

    JPanel grid = new JPanel();
    grid.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    grid.setLayout(new BoxLayout(grid, BoxLayout.Y_AXIS));
    grid.add(gridOps);

    // Put together the tabs

    JTabbedPane perfs = new JTabbedPane();
    perfs.addTab(GENERAL_TAB, general);
    perfs.addTab(SAVING_TAB, saving);
    perfs.addTab(GRID_TAB, grid);

    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
    mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    mainPanel.add(perfs);
    mainPanel.add(Box.createRigidArea(new Dimension(0, 5)));
    mainPanel.add(buttons);

    getContentPane().add(mainPanel);
    getRootPane().setDefaultButton(closeButton);

    // Associate listeners with the configuration widgets

    cbBinaryEncode.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent itemEvent) {
        final boolean selected = cbBinaryEncode.isSelected();
        savingPrefs.putBoolean("encodeLayerData", selected);
        cbCompressLayerData.setEnabled(selected);
      }
    });

    cbCompressLayerData.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent itemEvent) {
        savingPrefs.putBoolean("layerCompression", cbCompressLayerData.isSelected());
      }
    });

    cbUsefulComments.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent itemEvent) {
        savingPrefs.putBoolean("usefulComments", cbUsefulComments.isSelected());
      }
    });

    cbEmbedImages.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent itemEvent) {
        final boolean embed = cbEmbedImages.isSelected();
        savingPrefs.putBoolean("embedImages", embed);
        rbEmbedInTiles.setEnabled(embed);
        rbEmbedInSet.setEnabled(embed);
      }
    });

    cbReportIOWarnings.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent itemEvent) {
        ioPrefs.putBoolean("reportWarnings", cbReportIOWarnings.isSelected());
      }
    });

    cbAutoOpenLastFile.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent itemEvent) {
        ioPrefs.putBoolean("autoOpenLast", cbAutoOpenLastFile.isSelected());
      }
    });

    cbGridAA.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent itemEvent) {
        displayPrefs.putBoolean("gridAntialias", cbGridAA.isSelected());
      }
    });

    undoDepth.addChangeListener(new ChangeListener() {
      @Override
      public void stateChanged(ChangeEvent changeEvent) {
        prefs.putInt("undoDepth", undoDepth.intValue());
      }
    });

    gridOpacitySlider.addChangeListener(new ChangeListener() {
      @Override
      public void stateChanged(ChangeEvent changeEvent) {
        displayPrefs.putInt("gridOpacity", gridOpacitySlider.getValue());
      }
    });

    // gridColor.addChangeListener(...);

    rbEmbedInTiles.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent actionEvent) {
        savingPrefs.putBoolean("tileSetImages", !rbEmbedInTiles.isSelected());
      }
    });

    rbEmbedInSet.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent actionEvent) {
        savingPrefs.putBoolean("tileSetImages", rbEmbedInSet.isSelected());
      }
    });

    rbEmbedInTiles.setEnabled(false);
    rbEmbedInSet.setEnabled(false);

    // gridColor.setName("tiled.grid.color");
  }

  public void configure() {
    updateFromConfiguration();
    setVisible(true);
  }

  private void updateFromConfiguration() {
    undoDepth.setValue(prefs.getInt("undoDepth", 30));
    gridOpacitySlider.setValue(displayPrefs.getInt("gridOpacity", 255));

    boolean embedImages = savingPrefs.getBoolean("embedImages", true);
    if (embedImages) {
      cbEmbedImages.setSelected(true);

      if (savingPrefs.getBoolean("tileSetImages", false)) {
        rbEmbedInSet.setSelected(true);
      } else {
        rbEmbedInTiles.setSelected(true);
      }
    }

    cbUsefulComments.setSelected(savingPrefs.getBoolean("usefulComments", false));
    cbBinaryEncode.setSelected(savingPrefs.getBoolean("encodeLayerData", true));
    cbCompressLayerData.setSelected(savingPrefs.getBoolean("layerCompression", true));
    cbGridAA.setSelected(displayPrefs.getBoolean("gridAntialias", true));
    cbReportIOWarnings.setSelected(ioPrefs.getBoolean("reportWarnings", false));
    cbAutoOpenLastFile.setSelected(ioPrefs.getBoolean("autoOpenLast", false));

    cbCompressLayerData.setEnabled(cbBinaryEncode.isSelected());
    rbEmbedInTiles.setEnabled(embedImages);
    rbEmbedInSet.setEnabled(embedImages);
  }

  private void doExport() {
    JFileChooser chooser = new ConfirmingFileChooser(null);
    chooser.addChoosableFileFilter(xmlFileFilter);
    int result = chooser.showSaveDialog(this);

    if (result == JFileChooser.APPROVE_OPTION) {
      File configFile = chooser.getSelectedFile();

      try {
        FileOutputStream outputStream = null;
        try {
          outputStream = new FileOutputStream(configFile);
          prefs.exportSubtree(outputStream);
        } finally {
          if (outputStream != null) {
            outputStream.close();
          }
        }
      } catch (Exception e) {
        YEx.info("Error while exporting configuration", e);
      }
    }
  }

  private void doImport() {
    JFileChooser chooser = new JFileChooser();
    chooser.addChoosableFileFilter(xmlFileFilter);
    int result = chooser.showOpenDialog(this);

    if (result == JFileChooser.APPROVE_OPTION) {
      File configFile = chooser.getSelectedFile();
      try {
        FileInputStream inputStream = null;
        try {
          inputStream = new FileInputStream(configFile);
          Preferences.importPreferences(inputStream);
        } finally {
          if (inputStream != null) {
            inputStream.close();
          }
        }
      } catch (Exception e) {
        YEx.info("Error while importing configuration", e);
      }
      updateFromConfiguration();
    }
  }
}
TOP

Related Classes of de.yaams.extensions.basemap.tiled.mapeditor.dialogs.ConfigurationDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.